using System;
using System.Collections.Generic;
using ns26;
using ns27;
using Triton.Game.Mono;

namespace Triton.Game.Mapping
{
	[Attribute38("Zone")]
	public class Zone : MonoBehaviour
	{
		public TAG_ZONE m_ServerTag => method_2<TAG_ZONE>("m_ServerTag");

		public Player.Side m_Side => method_2<Player.Side>("m_Side");

		public static float TRANSITION_SEC => MonoClass.smethod_6<float>(TritonHs.MainAssemblyPath, "", "Zone", "TRANSITION_SEC");

		public Player m_controller => method_3<Player>("m_controller");

		public List<Card> m_cards => method_3<Class271<Card>>("m_cards")?.method_25();

		public bool m_layoutDirty => method_2<bool>("m_layoutDirty");

		public bool m_updatingLayout => method_2<bool>("m_updatingLayout");

		public int m_inputBlockerCount => method_2<int>("m_inputBlockerCount");

		public int m_layoutBlockerCount => method_2<int>("m_layoutBlockerCount");

		public Zone(IntPtr address, string className)
			: base(address, className)
		{
		}

		public Zone(IntPtr address)
			: this(address, "Zone")
		{
		}

		public static int CardSortComparison(Card card1, Card card2)
		{
			return MonoClass.smethod_14<int>(TritonHs.MainAssemblyPath, "", "Zone", "CardSortComparison", new object[2] { card1, card2 });
		}

		public new string ToString()
		{
			return method_13("ToString");
		}

		public Player GetController()
		{
			return method_14<Player>("GetController", Array.Empty<object>());
		}

		public int GetControllerId()
		{
			return method_11<int>("GetControllerId", Array.Empty<object>());
		}

		public void SetController(Player controller)
		{
			method_8("SetController", controller);
		}

		public List<Card> GetCards()
		{
			return method_14<Class271<Card>>("GetCards", Array.Empty<object>())?.method_25();
		}

		public int GetCardCount()
		{
			return method_11<int>("GetCardCount", Array.Empty<object>());
		}

		public Card GetFirstCard()
		{
			return method_14<Card>("GetFirstCard", Array.Empty<object>());
		}

		public Card GetLastCard()
		{
			return method_14<Card>("GetLastCard", Array.Empty<object>());
		}

		public Card GetCardAtIndex(int index)
		{
			return method_14<Card>("GetCardAtIndex", new object[1] { index });
		}

		public Card GetCardAtPos(int pos)
		{
			return method_14<Card>("GetCardAtPos", new object[1] { pos });
		}

		public int GetLastPos()
		{
			return method_11<int>("GetLastPos", Array.Empty<object>());
		}

		public int FindCardPos(Card card)
		{
			return method_11<int>("FindCardPos", new object[1] { card });
		}

		public bool ContainsCard(Card card)
		{
			return method_11<bool>("ContainsCard", new object[1] { card });
		}

		public bool IsOnlyCard(Card card)
		{
			return method_11<bool>("IsOnlyCard", new object[1] { card });
		}

		public void DirtyLayout()
		{
			method_8("DirtyLayout");
		}

		public bool IsLayoutDirty()
		{
			return method_11<bool>("IsLayoutDirty", Array.Empty<object>());
		}

		public bool IsUpdatingLayout()
		{
			return method_11<bool>("IsUpdatingLayout", Array.Empty<object>());
		}

		public bool IsInputEnabled()
		{
			return method_11<bool>("IsInputEnabled", Array.Empty<object>());
		}

		public int GetInputBlockerCount()
		{
			return method_11<int>("GetInputBlockerCount", Array.Empty<object>());
		}

		public void AddInputBlocker()
		{
			method_9("AddInputBlocker", new Class276.Enum20[0]);
		}

		public void RemoveInputBlocker()
		{
			method_8("RemoveInputBlocker");
		}

		public void BlockInput(bool block)
		{
			method_8("BlockInput", block);
		}

		public void AddInputBlocker(int count)
		{
			method_9("AddInputBlocker", new Class276.Enum20[1] { Class276.Enum20.I4 }, count);
		}

		public bool IsBlockingLayout()
		{
			return method_11<bool>("IsBlockingLayout", Array.Empty<object>());
		}

		public int GetLayoutBlockerCount()
		{
			return method_11<int>("GetLayoutBlockerCount", Array.Empty<object>());
		}

		public void AddLayoutBlocker()
		{
			method_8("AddLayoutBlocker");
		}

		public void RemoveLayoutBlocker()
		{
			method_8("RemoveLayoutBlocker");
		}

		public bool CanAcceptTags(int controllerId, TAG_ZONE zoneTag, TAG_CARDTYPE cardType)
		{
			return method_11<bool>("CanAcceptTags", new object[3] { controllerId, zoneTag, cardType });
		}

		public bool AddCard(Card card)
		{
			return method_11<bool>("AddCard", new object[1] { card });
		}

		public bool InsertCard(int index, Card card)
		{
			return method_11<bool>("InsertCard", new object[2] { index, card });
		}

		public int RemoveCard(Card card)
		{
			return method_11<int>("RemoveCard", new object[1] { card });
		}

		public void UpdateLayout()
		{
			method_8("UpdateLayout");
		}

		public void UpdateInput()
		{
			method_8("UpdateInput");
		}

		public void StartFinishLayoutTimer(float delaySec)
		{
			method_8("StartFinishLayoutTimer", delaySec);
		}

		public void UpdateLayoutFinished()
		{
			method_8("UpdateLayoutFinished");
		}

		public void FireUpdateLayoutCompleteCallbacks()
		{
			method_8("FireUpdateLayoutCompleteCallbacks");
		}
	}
}
